package mysql8学习.高级.第04章_逻辑架构;

/**
 * 优化器:
 * 在优化器中会确定SQL语句的执行路径,比如是根据全表检索,还是根据索引检索等。
 * 经过了解析器，MySQL 就知道你要做什么了。
 * 在开始执行之前，还要先经过优化器的处理。
 * 一条查询可以有很多种执行方式，最后都返回相同的结果。
 * 优化器的作用就是找到这其中最好的执行计划。
 *
 * 在执行之前需要判断该用户是否具备权限。
 * 如果没有，就会返回权限错误。
 * 如果具备权限，就执行SQL查询并返回结果。
 * 在MySQL8.0以下的版本,如果设置了查询缓存，这时会将查询结果进行缓存。
 *
 * 如果有权限，就打开表继续执行。
 * 打开表的时候，执行器就会根据表的引擎定义,调用存储引擎API对表进行的读写。
 * 存储引擎API只是抽象接口，下面还有个存储引擎层，具体实现还是要看表选择的存储引擎。
 *
 *
 * 在查询优化器中，可以分为逻辑查询优化阶段和物理查询优化阶段。
 *
 * ● 逻辑查询优化就是通过改变sQL语句的内容来使得SQL查询更高效，
 * 同时为物理查询优化提供更多的候选执行计划。
 * 通常采用的方式是对SQL语句进行等价变换，对查询进行重写，而查询重写的数学基础就是关系代数。
 * 对条件表达式进行等价谓词重写、条件简化,对视图进行重写，对子查询进行优化，
 * 对连接语义进行了外连接消除、嵌套连接消除等。
 *
 * ● 物理查询优化是基于关系代数进行的查询重写，而关系代数的每一步都对应着物理计算,
 * 这些物理计算往往存在多种算法，因此需要计算各种物理路径的代价，从中选择代价最小的作为执行计划。
 * 在这个阶段里，对于单表和多表连接的操作，需要高效地使用索引，提升查询效率。
 *
 */
public class C3_优化器 {
}
